package TankGame5;

import java.util.Vector;

public class Enemy extends Tank implements Runnable{
    Vector<Shot> shots = new Vector<>();
    //增加成员属性，让Enemy可以得到敌人坦克的Vector
    Vector<Enemy> enemies = new Vector<>();

    //这里提供一个方法，可以让MyPanel的成员 Vector<Enemy> enemys = new Vector<>();
    //设置到Enemy 的成员enemies
    public void setEnemies(Vector<Enemy> enemies) {
        this.enemies = enemies;
    }
    //编写方法，判断当前的坦克是否域集合enemies里面的坦克发生重叠
    public boolean isTouchEnemy() {
        //判断当前坦克（this）的方向
        switch (this.getDirect()) {
            case 0://向上
//让当前的敌人坦克和别的敌人坦克比较
                for (int i = 0; i < enemies.size(); i++) {
                    //从Vector集合取出一个敌人坦克
                    Enemy enemy = enemies.get(i);
                    //不和自己比较
                    if (enemy != this) {
                        //如果敌人的坦克向上/下
                        //1.敌人坦克的X范围是[enemy.getX(),enemy.getX()+40]
                        //2.敌人坦克的Y范围是[enemy.getY(),enemy.getX(),enemy.getY()+60]
                        if (enemy.getDirect() == 0 || enemy.getDirect() == 2) {
                            //当前坦克的左上角坐标[this.getX(),this.getY()]
                            if (this.getX()>= enemy.getX()
                                    &&this.getX()<= enemy.getX()+40
                                    &&this.getY()>=enemy.getY()
                                    &&this.getY()<=enemy.getY()+60){
                                return true;
                            }
                            //当前坦克的右上角坐标[this.getX()+40,this.getY()]
                            if (enemy.getX()+40>= enemy.getX()
                                    &&enemy.getX()+40<= enemy.getX()+40
                                    &&this.getY()>=enemy.getY()
                                    &&this.getY()<=enemy.getY()+60){
                                return true;
                            }
                        }

                        //如果敌人坦克方向向左/右
                        if (enemy.getDirect() == 1 || enemy.getDirect() == 3) {
                            //1.当前坦克的左上角坐标
                            if (this.getX()>= enemy.getX()
                                    &&this.getX()<= enemy.getX()+60
                                    &&this.getY()>=enemy.getY()
                                    &&this.getY()<=enemy.getY()+40){
                                return true;
                            }
                            //当前坦克的右上角
                            if (this.getX()>= enemy.getX()
                                    &&this.getX()<= enemy.getX()+60
                                    &&this.getY()>=enemy.getY()
                                    &&this.getY()<=enemy.getY()+40){
                                return true;
                            }
                        }
                    }
                }
                break;
            case 1:
                //让当前的敌人坦克和别的敌人坦克比较
                for (int i = 0; i < enemies.size(); i++) {
                    //从Vector集合取出一个敌人坦克
                    Enemy enemy = enemies.get(i);
                    //不和自己比较
                    if (enemy != this) {
                        //如果敌人的坦克向上/下
                        //1.敌人坦克的X范围是[enemy.getX(),enemy.getX()+40]
                        //2.敌人坦克的Y范围是[enemy.getY(),enemy.getX(),enemy.getY()+60]
                        if (enemy.getDirect() == 0 || enemy.getDirect() == 2) {
                            //当前坦克的右上角坐标[this.getX()+60,this.getY()]
                            if (this.getX()+60>= enemy.getX()
                                    &&this.getX()+60<= enemy.getX()+40
                                    &&this.getY()>=enemy.getY()
                                    &&this.getY()<=enemy.getY()+60){
                                return true;
                            }
                            //当前坦克的右下角坐标[this.getX()+60,this.getY()+40]
                            if (enemy.getX()+60>= enemy.getX()
                                    &&enemy.getX()+60<= enemy.getX()+40
                                    &&this.getY()+40>=enemy.getY()
                                    &&this.getY()+40<=enemy.getY()+60){
                                return true;
                            }
                        }

                        //如果敌人坦克方向向左/右
                        if (enemy.getDirect() == 1 || enemy.getDirect() == 3) {
                            //1.当前坦克的右上角坐标
                            if (this.getX()+60>= enemy.getX()
                                    &&this.getX()+60<= enemy.getX()+60
                                    &&this.getY()>=enemy.getY()
                                    &&this.getY()<=enemy.getY()+40){
                                return true;
                            }
                            //当前坦克的右下角
                            if (this.getX()+60>= enemy.getX()
                                    &&this.getX()+60<= enemy.getX()+60
                                    &&this.getY()+40>=enemy.getY()
                                    &&this.getY()+40<=enemy.getY()+40){
                                return true;
                            }
                        }
                    }
                }

                break;
            case 2:
                //让当前的敌人坦克和别的敌人坦克比较
                for (int i = 0; i < enemies.size(); i++) {
                    //从Vector集合取出一个敌人坦克
                    Enemy enemy = enemies.get(i);
                    //不和自己比较
                    if (enemy != this) {
                        //如果敌人的坦克向上/下
                        //1.敌人坦克的X范围是[enemy.getX(),enemy.getX()+40]
                        //2.敌人坦克的Y范围是[enemy.getY(),enemy.getX(),enemy.getY()+60]
                        if (enemy.getDirect() == 0 || enemy.getDirect() == 2) {
                            //当前坦克的左下角坐标[this.getX(),this.getY()]
                            if (this.getX()>= enemy.getX()
                                    &&this.getX()<= enemy.getX()+40
                                    &&this.getY()+60>=enemy.getY()
                                    &&this.getY()+60<=enemy.getY()+60){
                                return true;
                            }
                            //当前坦克的右下角坐标[this.getX()+40,this.getY()+60]
                            if (enemy.getX()+40>= enemy.getX()
                                    &&enemy.getX()+40<= enemy.getX()+40
                                    &&this.getY()+60>=enemy.getY()
                                    &&this.getY()+60<=enemy.getY()+60){
                                return true;
                            }
                        }

                        //如果敌人坦克方向向左/右
                        if (enemy.getDirect() == 1 || enemy.getDirect() == 3) {
                            //1.当前坦克的左下角角坐标
                            if (this.getX()>= enemy.getX()
                                    &&this.getX()<= enemy.getX()+60
                                    &&this.getY()+60>=enemy.getY()
                                    &&this.getY()+60<=enemy.getY()+40){
                                return true;
                            }
                            //当前坦克的右下角
                            if (this.getX()+40>= enemy.getX()
                                    &&this.getX()+40<= enemy.getX()+60
                                    &&this.getY()+60>=enemy.getY()
                                    &&this.getY()+60<=enemy.getY()+40){
                                return true;
                            }
                        }
                    }
                }
                break;
            case 3:
                //让当前的敌人坦克和别的敌人坦克比较
                for (int i = 0; i < enemies.size(); i++) {
                    //从Vector集合取出一个敌人坦克
                    Enemy enemy = enemies.get(i);
                    //不和自己比较
                    if (enemy != this) {
                        //如果敌人的坦克向上/下
                        //1.敌人坦克的X范围是[enemy.getX(),enemy.getX()+40]
                        //2.敌人坦克的Y范围是[enemy.getY(),enemy.getX(),enemy.getY()+60]
                        if (enemy.getDirect() == 0 || enemy.getDirect() == 2) {
                            //当前坦克的左上角坐标[this.getX(),this.getY()]
                            if (this.getX()>= enemy.getX()
                                    &&this.getX()<= enemy.getX()+40
                                    &&this.getY()>=enemy.getY()
                                    &&this.getY()<=enemy.getY()+60){
                                return true;
                            }
                            //当前坦克的左下角坐标[this.getX(),this.getY()+40]
                            if (enemy.getX()>= enemy.getX()
                                    &&enemy.getX()<= enemy.getX()+40
                                    &&this.getY()+40>=enemy.getY()
                                    &&this.getY()+40<=enemy.getY()+60){
                                return true;
                            }
                        }

                        //如果敌人坦克方向向左/右
                        if (enemy.getDirect() == 1 || enemy.getDirect() == 3) {
                            //1.当前坦克的左上角坐标
                            if (this.getX()>= enemy.getX()
                                    &&this.getX()<= enemy.getX()+60
                                    &&this.getY()>=enemy.getY()
                                    &&this.getY()<=enemy.getY()+40){
                                return true;
                            }
                            //当前坦克的左下角
                            if (this.getX()>= enemy.getX()
                                    &&this.getX()<= enemy.getX()+60
                                    &&this.getY()+40>=enemy.getY()
                                    &&this.getY()+40<=enemy.getY()+40){
                                return true;
                            }
                        }
                    }
                }
                break;


        }
        return false;
    }

    boolean islive = true;
    public Enemy(int x, int y) {
        super(x, y);
    }

    @Override
    public void run() {
        while (true){
            //这里我们判断如果shots size()=0，创建一颗子弹放入到shots集合里面，并启动
            if(islive&&shots.size()==0){
                Shot s = null;
                //判断坦克方向，创建对应的子弹
                switch (getDirect()){
                    case 0:
                        s = new Shot(getX()+20,getY(),0);
                        break;
                    case 1:
                        s = new Shot(getX()+60,getY()+20,1);
                        break;
                    case 2:
                        s = new Shot(getX()+20,getY()+60,2);
                        break;
                    case 3:
                        s = new Shot(getX(),getY()+20,3);
                        break;
                }
                shots.add(s);
                new Thread(s).start();
            }

            switch (getDirect()){
                case 0:
                    for (int i = 0; i <30 ; i++) {
                        if (getY() > 0&&!isTouchEnemy()) {
                            moveUp();
                        }
                        try {
                            Thread.sleep(50);//休眠50毫秒
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    break;

                case 1:
                    for (int i = 0; i <30 ; i++) {
                        if (getX() + 60 < 1000&&!isTouchEnemy()) {
                            moveRight();
                        }
                        try {
                            Thread.sleep(50);//休眠50毫秒
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    break;
                case 2:
                    for (int i = 0; i <30 ; i++) {
                        if (getY() + 60 < 750&&!isTouchEnemy()) {
                            moveDown();
                        }
                        try {
                            Thread.sleep(50);//休眠50毫秒
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    break;
                case 3:  //向左
                    for (int i = 0; i < 30; i++) {
                        if (getX() > 0&&!isTouchEnemy()) {
                            moveLeft();
                        }
                        //休眠50毫秒
                        try {
                            Thread.sleep(50);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    break;
            }

            //随机改变坦克方向
            setDirect((int) (Math.random()*4));
            if (!islive){
                break;
            }
        }
    }
}
